Demand for systems with high bandwidth networking and large storage space continues to increase. Making such systems is often both expensive and technically challenging. Instead of trying to increase the bandwidth and storage space of the hardware systems, various data compression techniques may be used to reduce the total number of bytes used to represent the data, such that the currently available storage space and networking bandwidth of the hardware systems may be more efficiently utilized for better system performance.
There are generally two types of data compression techniques: lossy data compression and lossless data compression. Lossy data compression allows for some loss of fidelity in the compressed information and may achieve a high compression ratio. Lossy data compression may be suitable, for example, for applications that process audio, image, and/or video data. Lossless data compression can ensure that the decompressed data is the exact copy of the original data, and therefore is often used in many data processing applications (e.g., those with text or computer executable code) where it is desirable that the decompressed data exactly matches the original data. A lossless data compression technique that can achieve a higher compression ratio and/or a high compression speed is often desired.